Problem se zapisem do registru ve WIN9x

Otázka od: Pavel Gazda

19. 12. 2002 13:28

Zdravim,

kde muze byt problem pri zapisu do registru ?
Tam kde to mohu odzkouset, mi vse funguje bez problemu,
ale jiz nekolikrat se stalo, ze zapis nebyl proveden, jednalo se
pravdepodobne o Win98 (pro Win2k to neni urceno).
Testovat to nijak nemohu, protoze k takovemu stroji se dostanu
tak 2x za rok.

diky za rady.

Pavel

K zapisu pouzivam priblizne toto:

  Reg := TRegistry.Create;
  try
    with Reg, Klic do
    begin
       RootKey := $80000002;;
      Ok := OpenKey(DefaultReg+KeyStr,true);
// zkusil jsem, ale nepomohlo
      if not Ok then
      begin
         Ok := CreateKey(DefaultReg+KeyStr);
         if Ok then
           Ok := OpenKey(DefaultReg+KeyStr,false);
     end;
//
     if Ok then
     begin
        WriteString('Name',Name);
        WriteInteger('SN',SN);
        WriteInteger('Pwd',Pwd);
......

Odpovedá: Roman Konecny

19. 12. 2002 13:25

Ahoj,

    tohle vypada jako ze zapisujes do klice, aniz bys predtim zavrel
predchzi. Je to celkem oblibena chybka. Priklad:
OpenKey(SomeKey);
WriteNeco(XXXX);
//-----------------chyba --- chybi CloseKey
OpenKey(Nextkey);
WriteNeco(XXXX);

Roman


----- Original Message -----
From: "Pavel Gazda" <Pavel.Gazda@seznam.cz>
To: "Delphi konf" <delphi-l@clexpert.cz>
Sent: Thursday, December 19, 2002 12:38 PM
Subject: Problem se zapisem do registru ve WIN9x


> Zdravim,
>
> kde muze byt problem pri zapisu do registru ?
> Tam kde to mohu odzkouset, mi vse funguje bez problemu,
> ale jiz nekolikrat se stalo, ze zapis nebyl proveden, jednalo se
> pravdepodobne o Win98 (pro Win2k to neni urceno).
> Testovat to nijak nemohu, protoze k takovemu stroji se dostanu
> tak 2x za rok.
>
> diky za rady.
>
> Pavel
>
> K zapisu pouzivam priblizne toto:
>
> Reg := TRegistry.Create;
> try
> with Reg, Klic do
> begin
> RootKey := $80000002;;
> Ok := OpenKey(DefaultReg+KeyStr,true);
> // zkusil jsem, ale nepomohlo
> if not Ok then
> begin
> Ok := CreateKey(DefaultReg+KeyStr);
> if Ok then
> Ok := OpenKey(DefaultReg+KeyStr,false);
> end;
> //
> if Ok then
> begin
> WriteString('Name',Name);
> WriteInteger('SN',SN);
> WriteInteger('Pwd',Pwd);
> ......
>
>
>

Odpovedá: Tvrz Miroslav

19. 12. 2002 15:16

Zkus to bez toho WITH, tzn.:

  Reg := TRegistry.Create;

  try

      Reg.RootKey := $80000002;;
      Ok := Reg.OpenKey(DefaultReg + KeyStr, True);

      // zkusil jsem, ale nepomohlo
      if not Ok then
        begin
          Ok := Reg.CreateKey(DefaultReg + KeyStr);
          if Ok then
            Ok := Reg.OpenKey(DefaultReg + KeyStr, False);
          end;
//
     if Ok then
       begin
         Reg.WriteString('Name', Name);
         Reg.WriteInteger('SN', SN);
         Reg.WriteInteger('Pwd', Pwd);
......

Jinak OpenKey() ti s paramatrem TRUE snad zalozi novy klic, pokud neexistuje
a nevyhasi to chybou

Miroslav Tvrz
Software Development Specialist
MERLIN
Štefánikova 32
150 00 Prague 5
Czech Republic
Tel.: (+420) 241010111
Fax: (+420) 241010165

E-mail: miroslav.tvrz@merlin.cz
http://www.merlinlogic.com/
http://www.merlin.cz/


-----Original Message-----
From: Pavel Gazda [mailto:Pavel.Gazda@seznam.cz]
Sent: Thursday, December 19, 2002 12:39 PM
To: Delphi konf
Subject: Problem se zapisem do registru ve WIN9x


Zdravim,

kde muze byt problem pri zapisu do registru ?
Tam kde to mohu odzkouset, mi vse funguje bez problemu,
ale jiz nekolikrat se stalo, ze zapis nebyl proveden, jednalo se
pravdepodobne o Win98 (pro Win2k to neni urceno).
Testovat to nijak nemohu, protoze k takovemu stroji se dostanu
tak 2x za rok.

diky za rady.

Pavel

K zapisu pouzivam priblizne toto:

  Reg := TRegistry.Create;
  try
    with Reg, Klic do
    begin
       RootKey := $80000002;;
      Ok := OpenKey(DefaultReg+KeyStr,true);
// zkusil jsem, ale nepomohlo
      if not Ok then
      begin
         Ok := CreateKey(DefaultReg+KeyStr);
         if Ok then
           Ok := OpenKey(DefaultReg+KeyStr,false);
     end;
//
     if Ok then
     begin
        WriteString('Name',Name);
        WriteInteger('SN',SN);
        WriteInteger('Pwd',Pwd);
......

Odpovedá: Tvrz Miroslav

19. 12. 2002 14:18

A jeste mozna namisto teho $80000002 dat normalni konstantu
HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, atp.

Miroslav Tvrz
Software Development Specialist
MERLIN
Štefánikova 32
150 00 Prague 5
Czech Republic
Tel.: (+420) 241010111
Fax: (+420) 241010165

E-mail: miroslav.tvrz@merlin.cz
http://www.merlinlogic.com/
http://www.merlin.cz/


-----Original Message-----
From: Pavel Gazda [mailto:Pavel.Gazda@seznam.cz]
Sent: Thursday, December 19, 2002 12:39 PM
To: Delphi konf
Subject: Problem se zapisem do registru ve WIN9x


Zdravim,

kde muze byt problem pri zapisu do registru ?
Tam kde to mohu odzkouset, mi vse funguje bez problemu,
ale jiz nekolikrat se stalo, ze zapis nebyl proveden, jednalo se
pravdepodobne o Win98 (pro Win2k to neni urceno).
Testovat to nijak nemohu, protoze k takovemu stroji se dostanu
tak 2x za rok.

diky za rady.

Pavel

K zapisu pouzivam priblizne toto:

  Reg := TRegistry.Create;
  try
    with Reg, Klic do
    begin
       RootKey := $80000002;;
      Ok := OpenKey(DefaultReg+KeyStr,true);
// zkusil jsem, ale nepomohlo
      if not Ok then
      begin
         Ok := CreateKey(DefaultReg+KeyStr);
         if Ok then
           Ok := OpenKey(DefaultReg+KeyStr,false);
     end;
//
     if Ok then
     begin
        WriteString('Name',Name);
        WriteInteger('SN',SN);
        WriteInteger('Pwd',Pwd);
......

Odpovedá: Pavel Gazda

19. 12. 2002 15:26

Myslim, ze to neni tento pripad, klic se otevira jen jednou a jeden,
jen se tam zapisuje vice udaju.

Pavel

>
> tohle vypada jako ze zapisujes do klice, aniz bys predtim zavrel
> predchzi. Je to celkem oblibena chybka. Priklad:
> OpenKey(SomeKey);
> WriteNeco(XXXX);
> //-----------------chyba --- chybi CloseKey
> OpenKey(Nextkey);
> WriteNeco(XXXX);
>

> > WriteString('Name',Name);
> > WriteInteger('SN',SN);
> > WriteInteger('Pwd',Pwd);
> > ......

Odpovedá: Miroslav Matějovic

19. 12. 2002 16:36

Pod W98 me funguje toto:

var
Reg : TRegistry;
begin
  Reg := TRegistry.Create; {vytvoří Reg}
  Reg.RootKey := HKEY_CURRENT_USER; {korenový klic}
  Reg.OpenKey('\software\microsoft\Internet Explorer\PageSetup\', true);
{otevre klíč}
  Reg.WriteString('margin_left', '0'); {zapse string}
  .......
  .......
  Reg.CloseKey; {zavře klíč}
  Reg.Free; {uvolní Reg}
end;